# Create your views here.
from estructura.models import Cliente, Producto, Pedido, Reclamo
from django.shortcuts import render_to_response, get_object_or_404
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, authenticate, logout
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
from django.http import HttpResponseRedirect, HttpResponse
from django.core.mail import EmailMessage
from estructura.forms import Pedidos, Reclamos, FormularioCliente
import datetime


def index(request):
    #productos = Producto.objects.all()
    #clientes = Cliente.objects.all()
    user_logged_in = request.user.is_authenticated()
    return render_to_response('index.html', {'user_logged_in':user_logged_in})
    
def nuevo_usuario(request):
    if request.method=='POST':
        usuario = UserCreationForm(request.POST)
        clientes = FormularioCliente(request.POST, request.FILES)
        #crear cliente(datos personales, usuario creado arriba)
        #validar formulario usuario y cliente
        if usuario.is_valid() and clientes.is_valid() :
            #guardar usuario
            miusuario = usuario.save()
            micliente = clientes.save(commit=False)
            # algo asi como esto pero no estoy seguro si funciona
            micliente.user = miusuario
            micliente.save()
            #guardar cliente
            #clientes.save()
            return HttpResponseRedirect('/')
    else:
        usuario = UserCreationForm()
        #crear formulario vacio para cliente
        clientes = FormularioCliente()    
    #mandar formulario y formulario2
    return render_to_response('nuevo_usuario.html', {'usuario':usuario, 'clientes':clientes }, context_instance=RequestContext(request))


def ingresar(request):
    if not request.user.is_anonymous():
        return HttpResponseRedirect('/privado')
    if request.method == 'POST':
        formulario = AuthenticationForm(request.POST)
        if formulario.is_valid:
            usuario = request.POST['username']
            clave = request.POST['password']
            acceso = authenticate(username=usuario, password=clave)
            if acceso is not None:
                if acceso.is_active:
                    login(request, acceso)
                    return HttpResponseRedirect('/privado')
                else:
                    return render_to_response('noactivo.html', context_instance=RequestContext(request))
                    
            else:
                return render_to_response('nousuario.html', context_instance=RequestContext(request))
    else:
        formulario = AuthenticationForm()
    return render_to_response('ingresar.html', {'formulario':formulario}, context_instance=RequestContext(request))

@login_required(login_url='/ingresar')
def privado(request):
    usuario = request.user
    user_logged_in = request.user.is_authenticated()
    dato = get_object_or_404(Cliente, user = usuario)
    return render_to_response('privado.html', {'usuario':dato, 'user_logged_in':user_logged_in}, context_instance=RequestContext(request))


@login_required(login_url='/ingresar')
def cerrar(request):
    logout(request)
    return HttpResponseRedirect('/')
    
@login_required(login_url='/ingresar')
def catalogo(request):
    user_logged_in = request.user.is_authenticated()
    return render_to_response('catalogo.html', {'user_logged_in':user_logged_in})
    
def buscar1(request):
    user_logged_in = request.user.is_authenticated()
    return render_to_response('buscar.html', {'user_logged_in':user_logged_in})    
    
def bombas(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Bomba")
    return render_to_response('bombas.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))

def generadores(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Generador")
    return render_to_response('generadores.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))

def chapeadoras(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Chapeadora")
    return render_to_response('chapeadoras.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))
    
def vibradores(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Vibrador")
    return render_to_response('vibradores.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))

def repuestos(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Repuesto")
    return render_to_response('repuestos.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))

def motores(request):
    user_logged_in = request.user.is_authenticated()
    productos = Producto.objects.filter(tipo="Motor")
    return render_to_response('motores.html', {'user_logged_in':user_logged_in, "lista":productos}, context_instance=RequestContext(request))
    
def buscar(request):
    user_logged_in = request.user.is_authenticated()
    return render_to_response('buscar.html', {'user_logged_in':user_logged_in})
    
def detalleProducto(request, id_producto):
    dato = get_object_or_404(Producto, idproducto=id_producto)
    return render_to_response('info.html',{'info':dato}, context_instance=RequestContext(request))

    
def lista_pedidos(request):
    pedidos = Pedido.objects.all()
    return render_to_response('pedidos.html',{'datos':pedidos}, context_instance=RequestContext(request))

def detalle_pedido(request, id_pedido):
    dato = get_object_or_404(Pedido, pk=id_pedido)
    return render_to_response('pedido.html',{'datos':dato}, context_instance=RequestContext(request))

def nuevoReclamo(request, id_pedido):
    pedi = get_object_or_404(Pedido, pk=id_pedido)
    if request.method=='POST':
        reclamo = Reclamo(estado='en proceso', fechaReclamo = datetime.datetime.now(), pedido=pedi)
        formulario = Reclamos(request.POST, request.FILES, instance=reclamo)
        if formulario.is_valid():
            formulario.save()
            dato2 = Reclamo.objects.filter(pedido=pedi)
            if len(dato2) > 1:
                return render_to_response('fallo.html', context_instance=RequestContext(request))
            enviarMailReclamo(dato2)
            return render_to_response('exito.html',{'datos':dato2}, context_instance=RequestContext(request))
    else:
        formulario = Reclamo()
    return render_to_response('reclamoform.html',{'formulario':formulario}, context_instance=RequestContext(request))
    
def lista_reclamos(request):
    usuario = request.user
    client = get_object_or_404(Cliente, user = usuario)
    pedidos = Pedido.objects.filter(cliente=client)
    return render_to_response('reclamos.html', {"lista":pedidos}, context_instance=RequestContext(request))

def detalle_reclamo(request, id_reclamo):
    dato = get_object_or_404(Reclamo, pk=id_reclamo)
    return render_to_response('reclamo.html',{'reclamo':dato}, context_instance=RequestContext(request))
    
def nuevoPedido(request, id_producto):
    dato = get_object_or_404(Producto, idproducto=id_producto)
    usuario = request.user
    cliente1 = get_object_or_404(Cliente, user = usuario)
    if request.method=='POST':
        pedido = Pedido(monto=dato.precio, estado='en proceso', fechaPedido = datetime.datetime.now(), fechaEstado = datetime.datetime.now(), producto = dato, cliente = cliente1)
        formulario = Pedidos(request.POST, request.FILES, instance=pedido)
        
        if formulario.is_valid():
            formulario.save()
            dato2 = get_object_or_404(Pedido, fechaPedido = datetime.datetime.now())
            actualizarPedido(dato2)
            enviarMail(dato2)
            return render_to_response('pedidos.html',{'datos':dato2}, context_instance=RequestContext(request))
    else:
        print "entro a else"
        formulario = Pedido()
    return render_to_response('pedidoform.html',{'formulario':formulario, 'datos':dato}, context_instance=RequestContext(request))

def nuevoPedido2(request):
    if request.method=='POST':
        formulario = Pedidos(request.POST, request.FILES)
        if formulario.is_valid():
            formulario.save()
            
            return HttpResponseRedirect('/pedidos')
    else:
        formulario = Pedido()
    return render_to_response('pedidoform.html',{'formulario':formulario}, context_instance=RequestContext(request))

def actualizarPedido(dato):
    precio = dato.monto
    cant = dato.cantidad
    dato.monto = (precio*cant)
    dato.save()
    
def enviarMail(dato):
    titulo = 'Realizar un pedido'
    contenido = 'Comunicarse con: ' + dato.cliente.nombre + " al correo: "  + dato.cliente.email + " o al telefono: " + str(dato.cliente.telefono) +"\n"
    contenido += 'Nombre del producto: '+ dato.producto.nombre +"\n"
    contenido += 'Codigo del producto: ' + str(dato.producto.pk)+"\n"
    contenido += 'Cantidad: ' + str(dato.cantidad)+"\n"
    contenido += 'Codigo del pedido : ' + str(dato.pk)+"\n"
    correo = EmailMessage(titulo, contenido, to = ['anasilvia82@gmail.com'])
    correo.send()
    dato.estado = "enviado"
    dato.save()
    
def enviarMailReclamo(dato):
    titulo = 'Realizar un reclamo'
    contenido = 'Comunicarse con: ' + dato.pedido.cliente.nombre + " al correo: "  + dato.pedido.cliente.email + " o al telefono: " + str(dato.pedido.cliente.telefono) +"\n"
    contenido += 'Nombre del producto: '+ dato.pedido.producto.nombre +"\n"
    contenido += 'Codigo del producto: ' + str(dato.pedido.producto.pk)+"\n"
    contenido += 'Codigo del pedido : ' + str(dato.pedido.pk)+"\n"
    contenido += 'Codigo del reclamo : ' + str(dato.pk)+"\n"
    contenido += 'Descripcion : ' + dato.descripcion +"\n"
    correo = EmailMessage(titulo, contenido, to = ['anasilvia82@gmail.com'])
    correo.send()
    dato.estado = "enviado"
    dato.save()

